
package com.rt.schedulenew.api;

import java.util.List;
import java.util.Map;

import com.rt.schedulebase.dto.*;

public interface IConfigService {
    String isLimitSelfOperate(String p0, String p1, String p2, ExamApplyDto p3);

    List<String> getOrganExamClassList();

    List<String> limitScheduleDay(String p0, String p1, Integer p2);

    String getConfigByName(String p0);

    /**
     * 获取系统登录相关配置
     *
     * @return
     */
    ConfigDto.SystemLoginConfig getSystemLoginConfig();


    ConfigDto.SysTask getTaskInfoByMethodName(String methodName);


    /**
     * 验证预约限制配置
     *
     * @param ea
     * @return 返回空字符串则说明 限制没有生效 否则为触发限制错误
     */
    String scheduleLimit2(ExamApplyDto ea);

    /**
     * 查询对应的配置是否开启
     * true 开启 false 未开启
     *
     * @param paramName
     * @return
     */
    boolean isOpenConfig(String paramName);

    /**
     * 是否自动打印签到凭条
     *
     * @param ea
     * @return
     */
    boolean isPrint4Sign(ExamApplyDto ea);

    /**
     * 是否提示打印签到凭条
     *
     * @param ea
     * @return
     */
    boolean isRemindPrint4Sign(ExamApplyDto ea);

    /**
     * 预约之后是否自动打印凭条
     *
     * @param ea
     * @return
     */
    boolean isPrint4Schedule(ExamApplyDto ea);

    /**
     * 判断是否在预约后进行凭条打印提示
     *
     * @param ea 申请单信息
     * @return bool true 提示 false 不提示
     * @author ljy
     */
    boolean isRemindPrint4Schedule(ExamApplyDto ea);

    /***
     * 是否当日签到
     * true 预约后调用签到接口 false 不调用签到接口
     * @param examApplyDto
     * @param apm
     * @return
     */
    boolean isScheduleTodayBySign(ExamApplyDto examApplyDto, DictScheduleApmDto apm);


    /**
     * 自动打印一次最多打印多少张
     *
     * @param ea
     * @return
     */
    boolean isPrintCode4Schedule(ExamApplyDto ea);

    /**
     * 获取配置项目的列表信息
     *
     * @param paramName
     * @return
     */
    List<String> getConfigListByName(String paramName);

    /**
     * 是否需要获取预约排队号
     *
     * @param patientSource
     * @param queueName
     * @return
     */
    Boolean isGetQueueNoFirst(String patientSource, String queueName);

    /**
     * @param
     * @return
     * @description 住院病人来源名称
     * @author ryan.li
     * @date 2022/11/9 10:33
     */
    String getPatientSourceIn();

    /**
     * 【自助端修改预约（改约）限制次数】
     *
     * @param ea
     * @return
     */
    Map<String, Object> scheduleLimit3(ExamApplyDto ea);

    /**
     * @param patientSource
     * @return
     * @description 通知部门
     * @author ryan.li
     * @date 2022/11/9 10:46
     */
    boolean isDeptNotice(String patientSource);

    /**
     * 获取申请单镇静需要的时间
     * 镇静申请单只可预约相应时长后的时段 examClass：表示检查类别，limitTime：表示只能预约“N”小时之后(带单位时间)
     *
     * @param examClass 检查类别
     * @param applyNos  申请单
     * @return 小时
     */
    int getClamBeforesTime(String examClass, List<String> applyNos);

    /**
     * 将预约成功消息同步给第三方
     *
     * @param ea
     * @param actType
     * @param scheduleStatus
     * @return
     */
    boolean isScheduleSync(ExamApplyDto ea, String actType, String scheduleStatus);

    /**
     * @param ea
     * @return
     * @description 【是否启用改约/取消/修改申请单时需填密码(医技端)】(1：关闭   0：启用),注：密码是登录账户的密码
     * @author ryan.li
     * @date 2022/11/9 10:51
     */
    boolean isNeedPassWordByDeptsche(ExamApplyDto ea);


    /**
     * 判断是否需要先缴费才能预约的项目或者预约渠道
     * 终端、检查类型、患者来源
     * 如果三个有值则三个条件都需要满足
     *
     * @param ea
     * @return
     */
    boolean getChargeFirstSchedule(ExamApplyDto ea);

    /**
     * @param
     * @return
     * @description 获取不预约的检查类别列表
     * @author ryan.li
     * @date 2022/11/9 10:59
     */
    List<String> getNotExamClassList();

    /**
     * 【卡号栏输入字母转化为大写进行查询】(1：关闭   0：启用)
     *
     * @param req
     */
    void toUpperCaseInput(Object req);

    /***
     * 在综合号码输入号码时增加前缀
     * @param icCard
     * @return
     */
    String icCardPre(String icCard);

    /**
     * 超时报到次数 目前固定返回3
     *
     * @return
     */
    int getSigninOvertimeLimit();

    /**
     * 获取设置的提示信息
     *
     * @param configName   配置键值名称 yy_noQueryExamApplyReminder
     * @param deptLocation 诊室地址
     * @param examClass    检查类别
     * @return
     */
    String customReminder(String configName, String deptLocation, String examClass);

    /***
     * 判断终端的申请时间限制
     * 如果超过限制就不展示申请单
     * @param terminalType
     * @param examClass
     * @param reqDate
     * @return
     */
    boolean isApplyDateLimit(String terminalType, String examClass, String reqDate);

    /**
     * 去掉已预约 超时且没有报道的数据
     *
     * @param ea
     * @param items
     * @param terminalType
     * @return
     */
    ExamApplyDto noShowScheduleItem(ExamApplyDto ea, List<ExamApplyItemDto> items, String terminalType);


    /**
     * @param dto
     * @return
     * @description 获取是否可以有其他预约选项
     * @author ryan.li
     * @date 2022/10/17 16:52
     */
    Map<String, Object> hasOtherSchedule(ExamApplyDto dto);

    /**
     * 获取不能同一天检查的项目
     * resultMap.put("examClass", "当天已预约了 不能和镇静/增强同一天的检查");
     * resultMap.put("itemName", itemName);
     * resultMap.put("message", "项目冲突，请选择其他日期");
     * resultMap.put("title", "不能和镇静/增强同一天检查的项目");
     * @param ea
     * @return
     */
    Map<String, Object> noOneDayItem(ExamApplyDto ea);

    /**
     * 获取不能同一天检查的项目
     * resultMap.put("examClass", "当天已预约了 不能和镇静/增强同一天的检查");
     * resultMap.put("itemName", itemName);
     * resultMap.put("message", "项目冲突，请选择其他日期");
     * resultMap.put("title", "不能和镇静/增强同一天检查的项目");
     * @param ea
     * @return
     */
    Map<String, Object> noOneDayEnhanceOrClam(ExamApplyDto ea);

    /**
     * A列表项目比B列表项目至少优先或延后多少天多少小时（项目先后检查及时间设置）
     * @param ea
     * @param es
     * @return
     */
    String isItemBefore(ExamApplyDto ea, ExamScheduleDto es);
}
